package ar.com.sne.model.service.dom;

import java.util.List;

import org.springframework.stereotype.Service;

import foundation.common.util.BusinessException;
import foundation.common.util.CommonGeneralUtil;
import foundation.common.util.FinderFilter;
import foundation.common.util.PagedFinder;
import ar.com.sne.model.bo.dom.DomMercaderia;
import ar.com.sne.model.dao.factory.DomDAOFactory;
import ar.com.sne.util.SNeHibernateUtil;

@Service("domMercaderiaService")
public class DomMercaderiaServiceImpl implements DomMercaderiaService{
	
	private DomDAOFactory domMercaderiaDAO;
	
   	
	public void delete(DomMercaderia domMercaderia) {
		validacionDelete(domMercaderia);
		SNeHibernateUtil.currentSession().getTransaction().begin();
		domMercaderiaDAO.getDomMercaderiaDAO().delete(domMercaderia);
		SNeHibernateUtil.currentSession().getTransaction().commit();
	}


	public List<DomMercaderia> findAll() {
		return domMercaderiaDAO.getDomMercaderiaDAO().findAll();
	}		

	
	public DomMercaderia findById(Long id) {
		return (DomMercaderia) domMercaderiaDAO.getDomMercaderiaDAO().getById(id);
	}


	public void save(DomMercaderia domMercaderia) {
		if(domMercaderia.getId() == null) {
			validacionCreate(domMercaderia);
		} else {
			validacionUpdate(domMercaderia);
		}
		SNeHibernateUtil.currentSession().getTransaction().begin();
		domMercaderiaDAO.getDomMercaderiaDAO().save(domMercaderia);
		SNeHibernateUtil.currentSession().getTransaction().commit();
	}
	
	
	public List<DomMercaderia> find(FinderFilter filter) {
	
		return domMercaderiaDAO.getDomMercaderiaDAO().find(filter);
	}
	

	public PagedFinder findPaging(PagedFinder pf) {
		return domMercaderiaDAO.getDomMercaderiaDAO().findPaging(pf);
	}

	
	/**
	 * Validaciones de negocio pre-delete Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param domMercaderia
	 *            la instancia a validar antes de ser borrada
	 */
	private void validacionDelete(DomMercaderia domMercaderia) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	/**
	 * Validaciones de negocio pre-update Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param domMercaderia
	 *            la instancia a validar antes de ser modificada
	 */
	private void validacionUpdate(DomMercaderia domMercaderia) {
		BusinessException be = new BusinessException();
		
		//valida que el codigo no sea duplicado
		FinderFilter filter = new FinderFilter();
//		if(domMercaderiaList.size()>0) //exite un tipo de movimiento de cta cte de poliza con el codigo pasado como parametro
//			be.addExceptionKey("DomMercaderia.validacionCreate.codigoDuplicado");
		
		CommonGeneralUtil.throwBussinesException(be);		
		
	}

	/**
	 * Validaciones de negocio pre-create Si al realizar la validacion la misma
	 * no pasa, se lanza una BusinessException
	 * 
	 * @param domMercaderia
	 *            la instancia a validar antes de ser creada
	 */
	private void validacionCreate(DomMercaderia domMercaderia) {
		BusinessException be = new BusinessException();
		
		CommonGeneralUtil.throwBussinesException(be);
	}
	
	
}
